/*
判断当前用户是否有看到当前item 对应菜单项的权限
*/
hasAuth = (item) => {
    const key = item.key
    const menuSet = this.menuSet
/*
1.如果菜单项标识为公开
2.如果当前用户是admin
3.如果菜单项的key 在用户的menus 中
        */
    if(item.isPublic || memoryUtils.user.username==='admin' || menuSet.has(key)) {
        return true
// 4. 如果有子节点, 需要判断有没有一个child 的key 在menus 中
    } else if(item.children){
        return !!item.children.find(child => menuSet.has(child.key))
    }
}

/*
返回包含n 个<Item>和<SubMenu>的数组
*/
getMenuNodes = (list) => {
    // 得到当前请求的path
    const path = this.props.location.pathname
    return list.reduce(
        (pre, item) => {
            if (this.hasAuth(item)) {
                if (!item.children) {
                    pre.push((
                        <Menu.Item key={item.key}>
                            <Link to={item.key}>
                                <Icon type={item.icon}/>
                                <span>{item.title}</span>
                            </Link>
                        </Menu.Item> ))
                } else {
                    pre.push((
                        <SubMenu key={item.key} title={
                            <span>
                                <Icon type={item.icon}/>
                                <span>{item.title}</span>
                            </span>}> { this.getMenuNodes(item.children) }
                        </SubMenu> ))
                    if(item.children.find(cItem => path.indexOf(cItem.key)===0)) {
                        this.openKey = item.key
                    }
                }
    }return pre }, [])

}

componentWillMount ()
{
    this.menuSet = new Set(memoryUtils.user.role.menus || [])
    this.menuNodes = this.getMenuNodes(menuList)
}
